#include<iostream>
#include<algorithm>
#define MAXN 100005
using namespace std;
struct node{
	int v,next;
}E[MAXN<<2];
int H[MAXN],tot,k;
void add(int x,int y){
    E[++tot].v=y;
    E[tot].next=H[x];
    H[x]=tot;
}
int F[MAXN][21],N,A[MAXN],depth[MAXN],j;
void dfs(int r){
	for(int i=H[r];i;i=E[i].next)	
		if(!depth[E[i].v]){
			depth[E[i].v]=depth[r]+1;
			dfs(E[i].v);
			for(int j=1;j<=k;j++)
				F[r][j]+=F[E[i].v][j-1];
		}
}
void dfs1(int r){
	for(int i=H[r];i;i=E[i].next)
		if(depth[E[i].v]>depth[r]){
			for(int j=k;j>=2;j--)
				F[E[i].v][j]-=F[E[i].v][j-2];
			for(int j=1;j<=k;j++)
				F[E[i].v][j]+=F[r][j-1];
			dfs1(E[i].v);
		}
}
int main(){
	cin>>N>>k;
	for(int i=1,a,b;i<N;i++){
		cin>>a>>b;
		add(a,b);
		add(b,a);
	}
	for(int i=1;i<=N;i++){
		cin>>F[i][0];
	}
	depth[1]=1;
	dfs(1);
	dfs1(1);	
	for(int j=1;j<=N;j++){
        int ans=0;
        for(int i=0;i<=k;i++)ans+=F[j][i];
        cout<<ans<<endl;
    }
}
